#!/bin/bash

# input 
# archivo que arriban al directorio $ARRIDIR/<nombre_archivo>
# maestro de salas $MAEDIR/salas.mae
# maestro de obras $MAEDIR/obras.mae

# output
# archivos de reservas solicitadas $ACEPDIR/<nombre_archivo>
# archivos de invitados $REPODIR/<nombre_archivo>
# archivos rechazados $RECHDIR/<nombre_archivo>
# log $LOGDIR/Recibir_B.$LOGEXT

T_SLEEP=10 #tiempo de espera entre cada vuelta (en seg)
IFS=$'\n'
loop=0
logGrabar="Recibir_B"

if [ -z "${GRUPO}" -o -z "${BINDIR}" ]; then
        source Grabar_L
	source Start_D
	source Mover_B
	source verifyInstall.sh -i $logGrabar
else
        auxDir="${GRUPO}/${BINDIR}"
        source "${auxDir}"/Grabar_L
	source "${auxDir}"/Mover_B
	source "${auxDir}"/Start_D
	source "${auxDir}"/verifyInstall.sh -i $logGrabar
fi


if [ $RETURN == 0 ]; then
	Grabar_L $logGrabar "No Se Ejecuta Comando $logGrabar, No Ha Sido Inicializado El Sistema" "W"
	return 1
else
	pid_recibir=`ps -e | grep -e 'Recibir_B.sh$' | awk '{print $1}'`
	for ((  ; 1 == 1 ; )); do	

		loop=$(expr $loop+1 | bc );
		Grabar_L "Recibir_B" "PID Recibir: $pid_recibir Ciclo $loop Hora: $(date +%T)" "I"
#		Archivos=`ls -1 "$GRUPO"/"$ARRIDIR"/* 2> /dev/null` # recupero los archivo del directorio $ARRIDIR
		Archivos=`ls -1 -F "$GRUPO"/"$ARRIDIR"/* | grep -e "[^/]$" 2> /dev/null` # recupero los archivo del directorio $ARRIDIR

		# recorro cada archivo de entrada
		for file in $Archivos; do
			archivo_valido=X
			file_name=${file##*/} # me quedo con el nombre del archivo

	#=============	validación archivo de texto =============#
			file "$file" | grep -e "text" > /dev/null
			if [ $? -ne 0 ]; then
				Grabar_L "Recibir_B" "Se Rechaza $file_name, Tipo Archivo Invalido" "E";
				Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
				continue;
			fi

	#=============	validación archivo de Invitados=============#
			file "$file_name" | grep -e ".inv" > /dev/null
			if [ $? -eq 0 ]; then # se procesa como archivo de invitados
				Referencia_interna=${file_name%%.*}
		
				# busco un guion en la referencia interna
				echo $Referencia_interna | grep -e "-.*" > /dev/null
				if [  $? -eq 0 ] ; then
					archivo_valido=''
				fi			

				# busco un espacio en la referencia interna
				echo $Referencia_interna | grep -e '\ .*' > /dev/null
				if [  $? -eq 0 ] ; then
					archivo_valido=''
				fi			
			
				if [ -z $archivo_valido ]; then
					Grabar_L "Recibir_B" "Se Rechaza $file_name, Tipo Archivo Invalido" "E";
					Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
				else
					Grabar_L "Recibir_B" "Se Acepta $file_name" "I";
					Mover_B  "$file" "$GRUPO/$REPODIR/$file_name" $0
	
				fi
				continue;
			fi

	#=============	fin validación archivo de Invitados=============#

	#=============	validación archivo de Reserva =============#
			# formato <ID de la Obra>-<CORREO>-<xxx>
			Formato_valido=`echo "$file_name" | grep "^[0-9]*-[^-]*-[^- ]*$"`;

			if [ -z $Formato_valido ] ; then
				Grabar_L "Recibir_B" "Formato Incorrecto: $file_name" "E";
				Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
				continue;
			fi

			# recupero los campos del archivo
			Id_Obra_Sala=$(echo "$file_name" | cut -d'-' -f1)	
			Correo=$(echo "$file_name" | cut -d'-' -f2)
			Texto=$(echo "$file_name" | cut -d'-' -f3)
		
			#veo si es un numero par (id de sala) o impar (id de obra)
			Resto=$(expr $Id_Obra_Sala%2 | bc)

			# busqueda de obras
			if [ $Resto -ne 0 ]; then
				Id_Obra=$Id_Obra_Sala
			
				#la obra debe existir en maestro de obras
				Obra_valida=$(cat "$GRUPO/$MAEDIR/obras.mae" | grep "^$Id_Obra;");
				if [ -z $Obra_valida ] ; then
					Grabar_L "Recibir_B" "Obra $Id_Obra Inexistente" "E";
					Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
					continue;
				fi

				#la correo debe existir en maestro de obras
				Correo_valido1=$(cat "$GRUPO/$MAEDIR/obras.mae" | grep "^[^;]*;[^;]*;$Correo;[^;]*$");
				if [ -z $Correo_valido1 ] ; then
					Correo_valido2=$(cat "$GRUPO/$MAEDIR/obras.mae" | grep "^[^;]*;[^;]*;[^;]*;$Correo");
					if [ -z $Correo_valido2 ] ; then
						Grabar_L "Recibir_B" "Correo $Correo Inexistente" "E";
						Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
						continue;
					fi
				fi

				#la combinación de obra + correo debe existir en maestro de obras
				Obra_Correo_valido1=$(cat "$GRUPO/$MAEDIR/obras.mae" | grep "$Id_Obra;[^;]*;$Correo;*");
				if [ -z $Obra_Correo_valido1 ] ; then
					Obra_Correo_valido2=$(cat "$GRUPO/$MAEDIR/obras.mae" | grep "$Id_Obra;[^;]*;[^;]*;$Correo");
					if [ -z $Obra_Correo_valido2 ] ; then
						Grabar_L "Recibir_B" "No existe combinación de $Id_Obra-$Correo en Maestro de Obras" "E";
						Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
						continue;
					fi
				fi
			
			fi

			# busqueda de salas
			if [ $Resto -eq 0 ] ; then
				Id_Sala=$Id_Obra_Sala
				#la combinación de sala + correo debe existir en maestro de obras
				Sala_Correo_valido=$(cat "$GRUPO/$MAEDIR/salas.mae" | grep "$Id_Sala;[^;]*;[^;]*;[^;]*;[^;]*;$Correo");
				if [ -z $Sala_Correo_valido ] ; then
					Grabar_L "Recibir_B" "No existe combinación de $Id_Sala-$Correo en Maestro de Salas" "E";
					Mover_B  "$file" "$GRUPO/$RECHDIR/$file_name" $0
					continue;
				fi
			fi

	#=============	fin validación archivo de Reserva =============#

	#=============	Se acepta archivo si esta ok      =============#
			Grabar_L "Recibir_B" "Se Acepta $file_name" "I";
			Mover_B  "$file" "$GRUPO/$ACEPDIR/$file_name" $0

		done;
	#================== llamada a Reservar_B ==================#
		Cantidad_archivos=$(ls -1 -F $GRUPO/$ACEPDIR/ | grep -e "[^/]$" | wc -l)
		if [ $Cantidad_archivos -ne 0 ]; then
			pid_Reservar=`ps -e | grep -e 'Reservar_B.sh$' | awk '{print $1}'`
		
			if [ -z $pid_Reservar ]; then
				"${GRUPO}"/"${BINDIR}"/Start_D "./Reservar_B.sh" $logGrabar
				pid_Reservar=`ps -e | grep -e 'Reservar_B.sh$' | awk '{print $1}'`
				echo "PID De Reservar Lanzado: $pid_Reservar"
			else
				echo "El proceso Reservar_B.sh ya está ejecutándose"
			fi
		fi

		sleep $T_SLEEP # duermo T_SLEEP segundos
	done
fi
